package scala.demo

/**
 * descriptions: 使用数组实现队列
 *
 * author: songyafei
 * date: 2022 - 01 - 13 13:38
 */
class ArrayQueue(size: Int) {
  //数组大小
  var n = size
  //队列
  var item = new Array[String](n)
  //头指针
  var head: Int = 0
  //尾指针
  var tail: Int = 0

  //入队
  def enqueue(item: String): Boolean = {
    if (null == tail) return false
    //表示队尾没有空间
    if(tail == n){
      // tail ==n && head==0，表示整个队列都占满了
      if(0 == head) return false
      for(i <- head to tail if i < tail){
        this.item(i-head) = this.item(i)
        // 搬移完之后重新更新head和tail
        tail -= head
        head = 0
      }
    }
    this.item(tail) = item
    tail += 1
    true
  }

  def dequeue(): String = {
    if (null == head) return null
    val item = this.item(head)
    head += 1
    item
  }
}

object runTest{
  def main(args: Array[String]): Unit = {
    val qu = new ArrayQueue(3)
    qu.enqueue("A")
    qu.enqueue("B")
    println("删除："+qu.dequeue())
    qu.enqueue("C")
    qu.enqueue("D")
//    qu.enqueue("E")
//    qu.enqueue("F")
    qu.item.foreach(println)
    println("--------------------------------")
    println(qu.dequeue())

  }
}